iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
Software Development

溫柔學姐的Kotlin補課/教學系列 第 5

寢室的秘密授課(四):測試覆蓋率 Test Coverage

  • 分享至 

  • xImage
  •  

「為什麼要寫這麼多測試案例啊?加減乘除不是四個就夠了?而且除法測試裡面還多放了一個assertFailsWith?」詩憶提問。

唯心聽到這個問題後不由得苦笑起來。「一帆風順固然是好,但那只是理想,真實世界往往一波三折。我就曾經見過一位乘客把健保卡拿出來刷車票錢,問公車司機為什麼刷不過。如果那個司機不理乘客或是回應不知道,乘客可能會和他吵起來或是檢舉他。」

「程式所在的世界也非常現實,所以對於一些失敗的情況也要預先做好準備。就像第一份作業不少同學交上來的程式連跑都不能跑,給零分會很輕鬆,但是現實是我必須一行一行看,對完成度比較高的同學給予比較高的成績。」唯心說完之後好似陷入那段痛苦的回憶,眼睛失去了光彩。

確信自己是加害者之一的詩憶摩挲著手指,不知道如何反應比較好。

靜寂下來的寢室裡,氣氛變得有些僵硬。

詩憶眼神游移不定,突然瞥見桌上的杯子,腦中靈光一閃,從背包拿出兩瓶果汁,將一瓶遞給唯心。「學姐一定口渴了吧,這瓶給妳。」

唯心呆楞的接過果汁,木然地轉開蓋子,蓋子上的水珠滴落到她的手背。冰涼的觸感嚇得她往後急退了幾步,站穩後向正在喝果汁的詩憶發出了警告。「飲料還是不要在筆電旁邊喝唷,灑上去就麻煩了。」

「了解。」詩憶把瓶蓋旋緊,放到遠離筆電的位置。

唯心回到原來的話題。「assertFailsWith就是用來測試範例程式有沒有預測到失敗情況。大於符號和小於符號中間包的是失敗的類型。ArithmeticException是指四則運算失敗,IllegalArgumentException則是指放進了不合規則、四則運算以外的符號。」

唯心小心翼翼的喝了口果汁,關緊瓶子後繼續說:「所以如果養成先寫測試再寫程式的習慣,可以大幅度降低程式出問題的可能性。」

詩憶想了想,反問另一種情形:「如果先寫程式再寫測試的話呢?或是程式是由其他人寫好的?」

「那就可以利用測試覆蓋率功能,可以檢查有沒有沒測試到的地方。」唯心再次把游標移動到四則運算旁邊三角形的地方。

詩憶重看了一次顯示出的清單,在之前的Run 四則運算測試下方有一個Run 四則運算測試 with Coverage

圖1

詩憶提議:「既然這樣的話,以後都跑這個覆蓋率測試,不需要原本的測試吧?」

唯心搖搖頭。「妳比較一下兩者花費的時間就知道為什麼不會每次都檢測覆蓋率了。」

圖2

圖3

「⋯⋯將近七倍的時間。」詩憶目瞪口呆。

「現在我把覆蓋率降低給妳看。」唯心回到詩憶旁邊,修改了例外測試的程式碼。

//    @Test
//    fun 例外測試() {
//        assertFailsWith<IllegalArgumentException> { 學號().四則運算(1, '?', 0) }
//    }

「對了,順便介紹一下。程式碼可以在不刪除的情況下被略過,稱之為註解,方法是在前方加上雙斜線。」說完之後唯心就再次啟動了檢測覆蓋率功能。「妳看,覆蓋率行數的地方,是不是從100%降低到87%了?」

圖4

圖5

詩憶點點頭,記下了程式碼註解和測試覆蓋率的方法。


上一篇
寢室的秘密授課(三):測試案例 Test Case
下一篇
晚上的空教室補課:名字賦予存在之變數 Variable
系列文
溫柔學姐的Kotlin補課/教學31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言